package fr.charlesen.projets.utt.lo09.sessionBeans;

import fr.charlesen.projets.utt.lo09.entites.Stages;
import fr.charlesen.projets.utt.lo09.facades.StagesFacadeLocal;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Charles EDOU NZE
 */
@Stateless
public class ServiceDesStages implements ServiceDesStagesLocal {

    /*
     * Appel des interfaces facades.
     */
    @EJB
    StagesFacadeLocal stageFacade;
    private EntityManager em;

    /*
     * ======================================================*
     * Methodes métiers - Gestion des fonctions de base : F3 *
     * ======================================================*
     */

    /*
     * F3 : Gestion des stages par un membre du service REE
     * ----------------------------------------------------
     * Le service des stages REE ne gère que les informations en provenance des entreprises.
     */
    //Ajout d'un stage -- Le champs "dateAjout" aura pour contenu la valeur du timestamp (Valeur à ajouter par défaut dans la base "default current_timestamps")
    @Override
    public void addStage(String type, String sujet, String entreprise, String ville, String pays) {

        Stages stage = new Stages();
        Integer id = stageFacade.count()+2;

        stage.setId(id);
        stage.setType(type);
        stage.setSujet(sujet);
        stage.setEntreprise(entreprise);
        stage.setVille(ville);
        stage.setPays(pays);

        java.util.Date today = new java.util.Date();
        stage.setDateajout(new java.sql.Timestamp(today.getTime()));
        stageFacade.create(stage);
    }

    // Suppression d'un stage
    @Override
    public void delStage(Integer id) {
        Stages stage = stageFacade.find(id);
        stageFacade.remove(stage);
    }

    // Listing des stages disponibles
    @Override
    public List<Stages> listStages() {
        return stageFacade.findAll();
    }

    // Listing des stages disponibles (non attribués à un étudiant), dont l'attribut 'id_stage' est non nul.
    @Override
    public List<Stages> listStagesOK() {
        Query q = em.createNamedQuery("SELECT e FROM Etudiants e WHERE e.id_stage IS NOT NULL");

        return q.getResultList();
    }

    /*
     * public List<Etudiants> listEtuByStageNOK()
     * ------------------------------------------
     * Fonctionnalité déjà définie dans "ProgrammeBoss"
     */
    // Listing des stages proposés par une certaine Entreprise E
    @Override
    public List<Stages> listStagesByEntreprise(String entreprise) {
        return em.createNamedQuery("findByEntreprise").setParameter("entreprise", entreprise).getResultList();
    }
}
